package com.qfedu.fy.util;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.font.FontRenderContext;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Random;

/**
 * ......................我佛慈悲......................
 * _oo0oo_
 * o8888888o
 * 88" . "88
 * (| -_- |)
 * 0\  =  /0
 * ___/`---'\___
 * .' \\|     |// '.
 * / \\|||  :  |||// \
 * / _||||| -卍-|||||- \
 * |   | \\\  -  /// |   |
 * | \_|  ''\---/''  |_/ |
 * \  .-\__  '-'  ___/-. /
 * ___'. .'  /--.--\  `. .'___
 * ."" '<  `.___\_<|>_/___.' >' "".
 * | | :  `- \`.;`\ _ /`;.`/ - ` : | |
 * \  \ `_.   \_ __\ /__ _/   .-` /  /
 * =====`-.____`.___ \_____/___.-`___.-'=====
 * `=---='
 * ..............佛祖保佑无BUG..................
 *
 * @author mxj
 * @date 2022/6/16 20:30
 */
public class CodeImgUtil {
    /**
     * 随机生成一个指定长度的字符串，要求随机 的数字或英文字母*/
    public static String createCode(int length){
        //1.实例化 对象 方便字符串拼接
        StringBuffer buffer=new StringBuffer();
        //2.实例化 随机数对象
        Random random=new Random();
        //3.循环生成每一位字符
        for(int i=1;i<=length;i++){
            //4.随机生成 确定类型
            int type=random.nextInt(3);//0 1 2
            switch (type){
                case 0://数字
                    buffer.append(random.nextInt(10));break;
                case 1://大写字母
                    buffer.append((char)(random.nextInt(26)+65));break;
                default://小写
                    buffer.append((char)(random.nextInt(26)+97));break;
            }
        }
        return buffer.toString();
    }

    public static BufferedImage createImg(String code) throws IOException {
        //2.定义图片的高度和宽度
        int width =60;
        int height =20;
        //建立bufferedImage对象，制定图片的长度和宽度以及色彩
        BufferedImage bi =new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
        //3.获取Graphics2D 绘制对象，开始绘制验证码
        Graphics2D g =bi.createGraphics();
        //4.设置文字的子图验证和大小
        Font font =new Font("微软雅黑", Font.PLAIN, 15);
        //5.设置字体的颜色
        Color color =new Color(0,0,0);
        //将颜色和字体放入
        g.setFont(font);
        g.setColor(color);
        g.setBackground(new Color(226,226,226));//背景颜色
        //开始绘制对象
        g.clearRect(0, 0, width, height);
        //绘制形状，获取距形对象
        FontRenderContext context =g.getFontRenderContext();//文字读取上下文
        Rectangle2D bounds =font.getStringBounds(code, context);//将生成的验证码放入
        //计算文字的坐标和间距
        double x =(width -bounds.getWidth())/2;
//        double y =(height -bounds.getHeight())/2;

        double y=15;
        double ascent =bounds.getY();
        double baseY =y -ascent;
        g.drawString(code, (int)x, (int)y);
        //结束配置
        g.dispose();
       return bi;
    }

}
